home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 96 / Amiga News 96.iso / amig_ad_os / laurent_faillie / lfcinter / token.h < prev   
C/C++ Source or Header  |  1977-12-31  |  4KB  |  93 lines

  1. /***************************************************************************\
  2. *  Token.h                                                                  *
  3. *  Projet : LFCInter                                                        *
  4. *      © LFSoft 1995-96                                                     *
  5. *                                                                           *
  6. *  Définition de la classe et de ses méthodes qui permettent de parser le   *
  7. *  texte source.                                                            *
  8. *                                                                           *
  9. \************* Voir LFCInter.cxx pour plus d'informations ******************/
  10.  
  11. #ifndef LCI_TOKEN_H
  12. #define LCI_TOKEN_H
  13.  
  14. #ifndef LFCINTER_H
  15. #include "LFCInter.h"
  16. #endif
  17.  
  18.     /*
  19.      * Valeurs symboliques des token lus.
  20.      * Note: l'ordre des symboles est important. Ils sont regroupés par type
  21.      * avec comme bornes :
  22.      *      'void' et 'char' : pour  les descripteurs de types
  23.      *      'for' et 'enum' : pour les mots clefs
  24.      *      'printf' et 'free' : pour les fonctions émulées ou les opérateurs complexes
  25.      *  de même:
  26.      *      'smbl_sra' et 'smbl_ora' encadre les opérateurs d'affectations.
  27.      */
  28. enum {
  29.     smbl_id = -1, // Identificateur
  30.     smbl_icn = 0, // objet non initialisé ou fin du fichier source
  31.     smbl_void=128,smbl_int,smbl_char,smbl_enum,
  32.     smbl_for,smbl_do,smbl_while,smbl_switch,smbl_default,smbl_case,smbl_if,
  33.     smbl_else, smbl_break,smbl_continue,smbl_return,smbl_goto, smbl_exit,
  34.     smbl_sra,smbl_sla,smbl_aa,smbl_sa,smbl_ma,smbl_da,smbl_mda,
  35.     smbl_anda,smbl_xora,smbl_ora,
  36.     smbl_sr,smbl_sl,smbl_inc,smbl_dec,smbl_land,
  37.     smbl_lor,smbl_lle,smbl_lge,smbl_lequ,smbl_lne,
  38.     smbl_printf,smbl_sprintf,smbl_scanf,smbl_putchar,smbl_puts, smbl_sizeof,
  39.     smbl_gets,smbl_getchar,smbl_flushstdout,smbl_atoi,
  40.     smbl_strcat,smbl_strchr,smbl_strcmp,smbl_strcpy,smbl_strerror,smbl_strlen,
  41.     smbl_strncat,smbl_strncmp,smbl_strncpy,smbl_strrchr,smbl_strdup,
  42.     smbl_stricmp,smbl_strnicmp, smbl_strcasecmp,smbl_strncasecmp,
  43.     smbl_strpbrk,smbl_strstr,smbl_strcoll,
  44.     smbl_strcspn,smbl_strspn,smbl_strtok,smbl_strtol,smbl_swab,
  45.     smbl_memchr,smbl_memcmp,smbl_memcpy,smbl_memmove,smbl_memset,smbl_memccpy,
  46.     smbl_system,smbl_isdigit,smbl_islower,smbl_isspace,smbl_ispunct,smbl_isupper,
  47.     smbl_isalpha,smbl_isxdigit,smbl_isalnum,smbl_isprint,smbl_isgraph,smbl_iscntrl,
  48.     smbl_isascii,smbl_isiso,smbl_toupper,smbl_tolower,smbl_toiso,
  49.     smbl_time,smbl_ctime,smbl_clock,smbl_sleep,
  50.     smbl_realloc,smbl_malloc, smbl_free,
  51.     smbl_debc,smbl_finc,smbl_debcppc
  52. };
  53.  
  54.     /*
  55.      * Classe de représentation de l'objet actuel.
  56.      */
  57. class _token {
  58. public:
  59.         // Constructeurs
  60.     _token(const char *x){ ptr=x-1; len=1; operator++(); }; // Grâce au ++ si le symbole pointé est un commentaire, il est directement sauté
  61.     _token() { ptr = NULL; construit(); };
  62.  
  63.     int operator * () { return val; }; // Return la valeur symbolique du token
  64.     operator const char * () { return ptr; };
  65.     _token operator ++ (); // Vas au token suivant (préfixe)...
  66.     _token operator ++ (int); // Vas au token suivant (suffixe)...
  67.     void saute(const char *sep=";"); // Saute l'objet courant
  68.     string obj();   // Retourne l'objet pointé
  69.  
  70.         // Est-ce un mot clef utilisé pour une définition ?
  71.     bool definition() { return ((val>=smbl_void && val<=smbl_char) || val=='*' || val==-2); };
  72.         // Est-ce une 'fonction' interne ?
  73.     bool interne() { return (val>=smbl_printf && val<=smbl_free); };
  74.  
  75.     int hash;
  76.  
  77. protected:
  78.     const char *ptr;    // pointeur dans le buffer du début de l'objet actuellement pointé
  79.     short int val;      // Valeur du symbolique du token lu.
  80.     size_t len;         // Longueur de l'objet pointé
  81.  
  82. private:
  83.     void construit( bool ignore= false );   // Construit les valeurs internes.
  84.  
  85. friend int calcligne( _token &);
  86. };
  87.  
  88.         /************ Quelques fonctions couramment utilisées ************/
  89.  
  90.     // LFCInter.cxx
  91. inline int calcligne( _token &t ){ return calcligne(t.ptr); };
  92.  
  93. #endif